Hasta el momento hemos usado solamente numeros para representar las transformaciones que describen la cinematica de los manipuladores, pero dentro del ambiente de IPython tenemos una libreria que nos va a ayudar mucho cuando queremos calcular una formula general.
La libreria de sympy nos ofrece herramientas de calculo analitico y numerico para analisis simbolico (por lo general nos referimos a el simplemente como calculo simbolico). Lo primero que tenemos que hacer es inicializar las funciones de sympy que vamos a necesitar.
In [ ]:
# Importa la función para imprimir LaTeX en el notebook de IPython
from sympy.interactive import printing
printing.init_printing()
# Importamos funciones utiles para algebra
from sympy import var, simplify, collect, expand, solve, sin, cos, Matrix
Y ahora podemos inicializar las variables que vamos a ocupar, esto lo hacemos asi:
In [ ]:
var("x y z")
Podemos representar cualquier tipo de expresión que queramos:
In [ ]:
x**2 + sin(y) + 3*x + 1
Incluso resolver algunas formulas con algebra o trigonometria:
In [ ]:
solve(x**2 + 2*x + 1, x)
In [ ]:
solve(sin(y) + cos(y), y)
Podemos guardar estas expresiones en variables, y estas variables van a tener metodos especiales, como por ejemplo la derivada.
In [ ]:
f = sin(x) + x
In [ ]:
f.diff(x)
Y tambien podemos representar matrices.
In [ ]:
Rz = Matrix([[cos(x), -sin(x), 0, 0],
[sin(x), cos(x), 0, 0],
[ 0, 0, 1, 0],
[ 0, 0, 0, 1]])
Rz
y usarla para operaciones:
In [ ]:
Rz*Rz
Nuestras funciones de Python, tambien nos pueden regresar objetos de sympy:
In [ ]:
def rotacionz(theta):
'''
Esta función devuelve una matriz de rotación con respecto al eje z
con una magnitud de theta.
Uso:
>>> rotacionz(y)
Matrix([
[cos(y), -sin(y), 0, 0],
[sin(y), cos(y), 0, 0],
[ 0, 0, 1, 0],
[ 0, 0, 0, 1]])
'''
Rz = Matrix([[cos(theta), -sin(theta), 0, 0],
[sin(theta), cos(theta), 0, 0],
[ 0, 0, 1, 0],
[ 0, 0, 0, 1]])
return Rz
In [ ]:
var("q_1")
rotacionz(q_1)